#!/bin/bash
echo "Running"
echo
echo 定义变量
pi=333

echo $pi

# for file in `ls /etc`
#     echo $file

for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done


your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name


myUrl="https://www.google.com"
readonly myUrl
# 报错
# myUrl="https://www.daadong.com" 

# 报错不能删除只读变量
# unset myUrl


echo
echo 字符串
mi=www
unset mi
# 不会输出mi
echo $mi

your_name="adong"
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str

your_name="adong"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1
# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2  $greeting_3

str=jj
echo ${#str}

string="github is a great site"
echo ${string:0:6} # 输出 github

string="github is a great site"
echo `expr index "$string" io`  # 输出 4

# 定义数组
echo
echo 定义数组

array_name=(
value0
value1
value2
value3
)

# 获取所有
echo ${array_name[@]}

# 访问某个
valuen=${array_name[0]}

echo $valuen


# 取得数组元素的个数
length=${#array_name[@]}
echo $length
# 或者 获取数组的长度
length=${#array_name[*]}
echo $length
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
echo $lengthn

echo
echo 注释

:<<EOF
注释内容...
注释内容...
注释内容...
EOF

# :<<'
# 注释内容...
# 注释内容...
# 注释内容...
# '

# :<<!
# 注释内容...
# 注释内容...
# 注释内容...
# !

echo
echo "Shell 传递参数实例！";
echo "执行的文件名：$0";
echo "第一个参数为：$1";
echo "第二个参数为：$2";
echo "第三个参数为：$3";
echo "所有参数为：$*";
echo "所有参数为：$@";
echo "参数个数为：$#";
echo "进程ID为：$$";
echo "最后进程ID为：$!";
echo "最后退出状态为：$?";
echo "shell选项为：$-";



echo
# $* 与 $@的区别 执行 ./test 1 2 3 4 进行参数打印
echo \$* 与 \$@的区别

echo "-- \$* 演示 ---"
for i in "$*"; do
    echo $i
done

echo "-- \$@ 演示 ---"
for i in "$@"; do
    echo $i
done

echo
echo expr表达式

val=`expr 2 + 2`
echo "两数之和为 : $val"


a=10
b=20

echo
# 算数运算符
echo 算数运算符:


echo `expr $a + $b`
echo `expr $a - $b`
echo `expr $a \* $b`
echo `expr $a / $b`
echo `expr $a % $b`
echo `expr $a == $b`
echo `expr $a != $b`


if [ $a == $b ]
then
   echo "a 等于 b"
fi

if [ $a != $b ]
then
   echo "a 不等于 b"
fi


echo
# 关系运算符
echo 关系运算符:

if [ $a -eq $b ]
then
   echo "$a -eq $b : a 等于 b"
else
   echo "$a -eq $b: a 不等于 b"
fi

if [ $a -ne $b ]
then
   echo "$a -ne $b: a 不等于 b"
else
   echo "$a -ne $b : a 等于 b"
fi

if [ $a -gt $b ]
then
   echo "$a -gt $b: a 大于 b"
else
   echo "$a -gt $b: a 不大于 b"
fi

if [ $a -lt $b ]
then
   echo "$a -lt $b: a 小于 b"
else
   echo "$a -lt $b: a 不小于 b"
fi

if [ $a -ge $b ]
then
   echo "$a -ge $b: a 大于或等于 b"
else
   echo "$a -ge $b: a 小于 b"
fi

if [ $a -le $b ]
then
   echo "$a -le $b: a 小于或等于 b"
else
   echo "$a -le $b: a 大于 b"
fi

echo
# 布尔运算符
echo 布尔运算符:

if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a == $b: a 等于 b"
fi

if [ $a -lt 100 -a $b -gt 15 ]
then
   echo "$a 小于 100 且 $b 大于 15 : 返回 true"
else
   echo "$a 小于 100 且 $b 大于 15 : 返回 false"
fi

if [ $a -lt 100 -o $b -gt 100 ]
then
   echo "$a 小于 100 或 $b 大于 100 : 返回 true"
else
   echo "$a 小于 100 或 $b 大于 100 : 返回 false"
fi

echo
# 逻辑运算符
echo 逻辑运算符

if [[ $a -lt 100 && $b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi

if [[ $a -lt 100 || $b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi

#字符串运算符
echo
echo 字符串运算符

a="abc"
b="efg"

if [ $a = $b ]
then
   echo "$a = $b : a 等于 b"
else
   echo "$a = $b: a 不等于 b"
fi

if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a != $b: a 等于 b"
fi

if [ -z $a ]
then
   echo "-z $a : 字符串长度为 0"
else
   echo "-z $a : 字符串长度不为 0"
fi

if [ -n "$a" ]
then
   echo "-n $a : 字符串长度不为 0"
else
   echo "-n $a : 字符串长度为 0"
fi

if [ $a ]
then
   echo "$a : 字符串不为空"
else
   echo "$a : 字符串为空"
fi

echo
echo 文件测试运算符
# 文件测试运算符

file='./github.bat'

if [ -r $file ]
then
   echo "文件可读"
else
   echo "文件不可读"
fi

if [ -w $file ]
then
   echo "文件可写"
else
   echo "文件不可写"
fi

if [ -x $file ]
then
   echo "文件可执行"
else
   echo "文件不可执行"
fi

if [ -f $file ]
then
   echo "文件为普通文件"
else
   echo "文件为特殊文件"
fi

if [ -d $file ]
then
   echo "文件是个目录"
else
   echo "文件不是个目录"
fi

if [ -s $file ]
then
   echo "文件不为空"
else
   echo "文件为空"
fi

if [ -e $file ]
then
   echo "文件存在"
else
   echo "文件不存在"
fi

echo
# 结果定向至文件
echo -e "结果定向至文件\n"
# echo "haha" > test.txt

# 显示变量
echo -e "显示变量\n"
# read读取标准输入流
# echo 请输入变量:
# read name 
# echo "$name It is a test"

echo "原样输出字符串，不进行转义"
echo '$name\"'

echo 
echo 显示命令执行结果
echo `date`

echo
echo -e  "test命令\n"

echo "数值测试"
num1=100
num2=100
if test $[num1] -eq $[num2]
then
    echo '两个数相等！'
else
    echo '两个数不相等！'
fi
echo
echo "字符串测试"

num1="ru1noob"
num2="runoob"
if test $num1 = $num2
then
    echo '两个字符串相等!'
else
    echo '两个字符串不相等!'
fi

echo
echo "文件测试"

if test -e ./Shell.md
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi

echo
echo "流程控制"
a=10
b=20
if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "没有符合的条件"
fi

echo
echo if与test连用
num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
    echo '两个数字相等!'
else
    echo '两个数字不相等!'
fi

echo
for i in 1 2 3 4 5
do
    echo "The value is: $i"
done

echo
for str in This is a string
do
    echo $str
done